NowCode:HJ8 合并表记录

题目:合并表记录

描述

数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。

提示:

0 <= index <= 11111111

1 <= value <= 100000

输入描述:

先输入键值对的个数n(1 <= n <= 500)
接下来n行每行输入成对的index和value值,以空格隔开

输出描述:

输出合并后的键值对(多行)

示例1

1
2
3
4
5
6
7
8
9
10
11
输入:
4
0 1
0 2
1 2
3 4

输出:
0 3
1 2
3 4

示例2

1
2
3
4
5
6
7
8
9
输入:
3
0 1
0 2
8 9

输出:
0 3
8 9

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <iterator>
#include <map>
using namespace std;

int main() {
int inputNum = 0;
cin >> inputNum;
int key = 0;
int value = 0;
std::map<int, int> nums;
while (inputNum--) {
cin >> key;
cin >> value;
auto ret = nums.insert(std::pair<int, int>(key, value));
if (ret.second == false) {
ret.first->second += value;
}
}
for (auto it : nums) {
cout << it.first << " " << it.second << endl;
}
}

思路

利用了map来记录,当插入失败时加上value,插入成功则继续,最终达到同key的求和效果

此题挺好

map::insert用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// map::insert (C++98)
#include <iostream>
#include <map>

int main ()
{
std::map<char,int> mymap;

// first insert function version (single parameter):
mymap.insert ( std::pair<char,int>('a',100) );
mymap.insert ( std::pair<char,int>('z',200) );

std::pair<std::map<char,int>::iterator,bool> ret;
ret = mymap.insert ( std::pair<char,int>('z',500) );
if (ret.second==false) {
std::cout << "element 'z' already existed";
std::cout << " with a value of " << ret.first->second << '\n';
}

// second insert function version (with hint position):
std::map<char,int>::iterator it = mymap.begin();
mymap.insert (it, std::pair<char,int>('b',300)); // max efficiency inserting
mymap.insert (it, std::pair<char,int>('c',400)); // no max efficiency inserting

// third insert function version (range insertion):
std::map<char,int> anothermap;
anothermap.insert(mymap.begin(),mymap.find('c'));

// showing contents:
std::cout << "mymap contains:\n";
for (it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';

std::cout << "anothermap contains:\n";
for (it=anothermap.begin(); it!=anothermap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';

return 0;
}
1
2
3
4
5
6
7
8
9
element 'z' already existed with a value of 200
mymap contains:
a => 100
b => 300
c => 400
z => 200
anothermap contains:
a => 100
b => 300